gdk: Allow setting task data on (de)serializers
authorBenjamin Otte <otte@redhat.com>
Tue, 28 Nov 2017 00:58:56 +0000 (01:58 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 3 Dec 2017 04:46:48 +0000 (05:46 +0100)
This mirrors GTask.

gdk/gdkcontentdeserializer.c
gdk/gdkcontentdeserializer.h
gdk/gdkcontentserializer.c
gdk/gdkcontentserializer.h

index 6c931e09787d8b9691241ddba67cef23575d1c33..f6a3f6f2bf8d3ac9852448f62eef196245c96151 100644 (file)
@@ -59,6 +59,9 @@ struct _GdkContentDeserializer
   GAsyncReadyCallback callback;
   gpointer callback_data;
 
+  gpointer task_data;
+  GDestroyNotify task_notify;
+
   GError *error;
   gboolean returned;
 };
@@ -100,6 +103,9 @@ gdk_content_deserializer_finalize (GObject *object)
   g_clear_object (&deserializer->cancellable);
   g_clear_error (&deserializer->error);
 
+  if (deserializer->task_notify)
+    deserializer->task_notify (deserializer->task_data);
+
   G_OBJECT_CLASS (gdk_content_deserializer_parent_class)->finalize (object);
 }
 
@@ -200,6 +206,28 @@ gdk_content_deserializer_get_user_data (GdkContentDeserializer *deserializer)
   return deserializer->user_data;
 }
 
+void
+gdk_content_deserializer_set_task_data (GdkContentDeserializer *deserializer,
+                                        gpointer                data,
+                                        GDestroyNotify          notify)
+{
+  g_return_if_fail (GDK_IS_CONTENT_DESERIALIZER (deserializer));
+
+  if (deserializer->task_notify)
+    deserializer->task_notify (deserializer->task_data);
+
+  deserializer->task_data = data;
+  deserializer->task_notify = notify;
+}
+
+gpointer
+gdk_content_deserializer_get_task_data (GdkContentDeserializer *deserializer)
+{
+  g_return_val_if_fail (GDK_IS_CONTENT_DESERIALIZER (deserializer), NULL);
+
+  return deserializer->task_data;
+}
+
 static gboolean
 gdk_content_deserializer_emit_callback (gpointer data)
 {
index 102a4bcc4ee1a1e1e33883af59158fae4bce10c8..671d5409c996f77221a4d33c4bed5a89cc375870 100644 (file)
@@ -54,6 +54,12 @@ GDK_AVAILABLE_IN_3_94
 GCancellable *          gdk_content_deserializer_get_cancellable        (GdkContentDeserializer *deserializer);
 GDK_AVAILABLE_IN_3_94
 gpointer                gdk_content_deserializer_get_user_data          (GdkContentDeserializer *deserializer);
+GDK_AVAILABLE_IN_3_94
+void                    gdk_content_deserializer_set_task_data          (GdkContentDeserializer *deserializer,
+                                                                         gpointer                data,
+                                                                         GDestroyNotify          notify);
+GDK_AVAILABLE_IN_3_94
+gpointer                gdk_content_deserializer_get_task_data          (GdkContentDeserializer *deserializer);
 
 GDK_AVAILABLE_IN_3_94
 void                    gdk_content_deserializer_return_success         (GdkContentDeserializer *deserializer);
index 6860c97cb446099879b2834bb2f80bbbc9e0b024..045cd20ce9d906f4331a8eb7fc5bb25593bca3b0 100644 (file)
@@ -60,6 +60,9 @@ struct _GdkContentSerializer
   GAsyncReadyCallback callback;
   gpointer callback_data;
 
+  gpointer task_data;
+  GDestroyNotify task_notify;
+
   GError *error;
   gboolean returned;
 };
@@ -101,6 +104,9 @@ gdk_content_serializer_finalize (GObject *object)
   g_clear_object (&serializer->cancellable);
   g_clear_error (&serializer->error);
 
+  if (serializer->task_notify)
+    serializer->task_notify (serializer->task_data);
+
   G_OBJECT_CLASS (gdk_content_serializer_parent_class)->finalize (object);
 }
 
@@ -202,6 +208,28 @@ gdk_content_serializer_get_user_data (GdkContentSerializer *serializer)
   return serializer->user_data;
 }
 
+void
+gdk_content_serializer_set_task_data (GdkContentSerializer   *serializer,
+                                      gpointer                data,
+                                      GDestroyNotify          notify)
+{
+  g_return_if_fail (GDK_IS_CONTENT_SERIALIZER (serializer));
+
+  if (serializer->task_notify)
+    serializer->task_notify (serializer->task_data);
+
+  serializer->task_data = data;
+  serializer->task_notify = notify;
+}
+
+gpointer
+gdk_content_serializer_get_task_data (GdkContentSerializer *serializer)
+{
+  g_return_val_if_fail (GDK_IS_CONTENT_SERIALIZER (serializer), NULL);
+
+  return serializer->task_data;
+}
+
 static gboolean
 gdk_content_serializer_emit_callback (gpointer data)
 {
index b1acf7fe2862a510738f63848263b55be9bd883b..428ddadafaaeb0c958e7cd3f4cbf332f6677a466 100644 (file)
@@ -54,6 +54,12 @@ GDK_AVAILABLE_IN_3_94
 GCancellable *          gdk_content_serializer_get_cancellable          (GdkContentSerializer   *serializer);
 GDK_AVAILABLE_IN_3_94
 gpointer                gdk_content_serializer_get_user_data            (GdkContentSerializer   *serializer);
+GDK_AVAILABLE_IN_3_94
+void                    gdk_content_serializer_set_task_data            (GdkContentSerializer   *serializer,
+                                                                         gpointer                data,
+                                                                         GDestroyNotify          notify);
+GDK_AVAILABLE_IN_3_94
+gpointer                gdk_content_serializer_get_task_data            (GdkContentSerializer   *serializer);
 
 GDK_AVAILABLE_IN_3_94
 void                    gdk_content_serializer_return_success           (GdkContentSerializer   *serializer);